﻿//using Aliyun.OSS;
//using System;
//using System.Collections.Generic;
//using System.IO;
//using UnityEngine;

//public partial class OssManager
//{
//    public static OssManager Instance { get; } = new OssManager();

//    private const string mAccessKeyId = "LTAI5tKi7w9vFkUqtWuMJXzn";
//    private const string mAccessKeySecret = "4kqlRH1gCDTQ2y5KSNbNd94SoDyeLH";

//    private const string DEV_EndPoint = "https://oss-cn-hangzhou.aliyuncs.com";
//    private const string DEV_BucketName = "slsk";

//    private const string PROD_EndPoint = "https://oss-cn-hangzhou.aliyuncs.com";
//    private const string PROD_BucketName = "slsk";

//    private string m_bucket_name;
//    private string m_endpoint;

//    private OssClient mOss;

//    private OssManager()
//    {
//        SwitchOssMode(Global.OssProdMode);
//    }

//    public void SwitchOssMode(bool oss_prod_mode)
//    {
//        //ClientConfiguration conf = new ClientConfiguration();
//        //conf.IsCname = true;
//        if (oss_prod_mode == false)
//        {
//            mOss = new OssClient(DEV_EndPoint, mAccessKeyId, mAccessKeySecret);
//            m_bucket_name = DEV_BucketName;
//            m_endpoint = DEV_EndPoint;
//        }
//        else
//        {
//            mOss = new OssClient(PROD_EndPoint, mAccessKeyId, mAccessKeySecret);
//            m_bucket_name = PROD_BucketName;
//            m_endpoint = PROD_EndPoint;
//        }
//    }

//    public void UploadFile(string oss_path, string localFile)
//    {
//        try
//        {
//            mOss.PutObject(m_bucket_name, oss_path, localFile);

//            Debug.Log($"Upload {oss_path} Succ");
//        }
//        catch (Exception e)
//        {
//            Debug.LogError($"PutObject failed with error info:{e.Message}");
//        }
//    }

//    private void DoAppend(string oss_path, string content)
//    {
//        long position = 0;
//        string local_file_name = $"{Application.temporaryCachePath}/temp_append_file.txt";

//        File.WriteAllLines(local_file_name, new string[] { content });

//        try
//        {
//            var metadata = mOss.GetObjectMetadata(m_bucket_name, oss_path);
//            position = metadata.ContentLength;
//        }
//        catch (Exception)
//        {

//        }

//        try
//        {
//            using (var fs = File.Open(local_file_name, FileMode.Open))
//            {
//                var request = new AppendObjectRequest(m_bucket_name, oss_path)
//                {
//                    ObjectMetadata = new ObjectMetadata(),
//                    Content = fs,
//                    Position = position
//                };

//                // 追加文件。
//                var result = mOss.AppendObject(request);

//                // 设置文件的追加位置。
//                position = result.NextAppendPosition;

//                Console.WriteLine("Append object succeeded, next append position:{0}", position);
//            }
//            Debug.Log($"Append {oss_path} Succ");
//        }
//        catch (Exception e)
//        {
//            Debug.LogError($"AppendObject failed with error info:{e.Message}");
//        }

//        File.Delete(local_file_name);
//    }

//    public void AppendString(string oss_path, string content)
//    {
//        if (DoesFileExist(oss_path) == false)
//        {
//            DoAppend(oss_path, content);
//        }
//        else
//        {
//            var remote_content = GetString(oss_path, 0, -1);
//            var arr = remote_content.Split(new char[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries);
//            if (string.CompareOrdinal(content, arr[arr.Length - 1]) == 0)
//            {
//                Debug.Log("OSS最新版本号一致");
//                return;
//            }
//            else
//            {
//                DoAppend(oss_path, content);
//            }
//        }
//    }

//    public List<string> ListObject(string oss_path, string prefix)
//    {
//        var lst = new List<string>();
//        try
//        {
//            ObjectListing result = null;
//            string nextMarker = string.Empty;
//            do
//            {
//                var listObjectsRequest = new ListObjectsRequest(m_bucket_name)
//                {
//                    Marker = nextMarker,
//                    MaxKeys = 100,
//                    Prefix = $"{oss_path}/{prefix}",
//                };

//                result = mOss.ListObjects(listObjectsRequest);

//                foreach (var summary in result.ObjectSummaries)
//                {
//                    lst.Add(summary.Key);
//                }
//                nextMarker = result.NextMarker;

//            }
//            while (result.IsTruncated);

//        }
//        catch (Exception ex)
//        {
//            Debug.LogError($"List Object failed. {ex.Message}");
//        }

//        return lst;
//    }

//    public bool DownloadFile(string remote_path, string local_path)
//    {
//        try
//        {
//            var obj = mOss.GetObject(m_bucket_name, remote_path);
//            using (var requestStream = obj.Content)
//            {
//                byte[] buf = new byte[1024];
//                var fs = File.Open(local_path, FileMode.OpenOrCreate);
//                var len = 0;
//                // 通过输入流将文件的内容读取到文件或者内存中。
//                while ((len = requestStream.Read(buf, 0, 1024)) != 0)
//                {
//                    fs.Write(buf, 0, len);
//                }
//                fs.Close();
//            }
//            return true;
//        }
//        catch (Exception)
//        {
//            return false;
//        }
//    }

//    public GetObject DownloadFileAsync(string remote_path, string local_path,
//        Action<GetObject> progress_callback, Action<GetObject> complete_callback)
//    {
//        GetObject obj = new GetObject(this);
//        obj.SetInfo(remote_path, local_path);
//        obj.OnProgress += progress_callback;
//        obj.OnComplete += complete_callback;
//        obj.Start();
//        return obj;
//    }

//    public bool DoesFileExist(string ossFile)
//    {
//        bool result = false;
//        try
//        {
//            result = mOss.DoesObjectExist(m_bucket_name, ossFile);
//        }
//        catch (Exception ex)
//        {
//            Debug.LogError(ex.Message);
//        }
//        return result;
//    }

//    public string GetString(string ossFile, long start, long end)
//    {
//        GetObjectRequest request = new GetObjectRequest(m_bucket_name, ossFile);
//        request.SetRange(start, end);
//        OssObject obj = mOss.GetObject(request);
//        StreamReader reader = new StreamReader(obj.Content);
//        return reader.ReadToEnd();
//    }

//    public long GetFileLength(string oss_file)
//    {
//        try
//        {
//            ObjectMetadata metadata = mOss.GetObjectMetadata(m_bucket_name, oss_file);
//            return metadata.ContentLength;
//        }
//        catch (Exception e)
//        {
//            Debug.LogError($"GetObjectMetadata failed:{e.Message}");
//        }
//        return 0;
//    }

//    public string GetFileMD5(string oss_file)
//    {
//        try
//        {
//            ObjectMetadata metadata = mOss.GetObjectMetadata(m_bucket_name, oss_file);
//            return metadata.ContentMd5;
//        }
//        catch (Exception e)
//        {
//            Debug.LogError($"GetObjectMetadata failed:{e.Message}");
//        }
//        return "";
//    }
//}
